import plotly.express as px
import plotly.graph_objs

# 一：散点动态图
df = px.data.gapminder()
print(df.head(10))
print(df.columns)
fig = px.scatter(
    df,
    x="gdpPercap",
    y="lifeExp",
    animation_frame="year",
    size="pop",
    color="continent",
    hover_name="country",
    log_x=True,
    size_max=55,
    range_x=[100, 100000],
    range_y=[25, 90],
    #   color_continuous_scale=px.colors.sequential.Emrld
)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)')
fig.show()

import plotly.express as px
from vega_datasets import data

# 柱状动态图
df = data.disasters()
df = df[df.Year > 1990]
fig = px.bar(df,
             y="Entity",
             x="Deaths",
             animation_frame="Year",
             orientation='h',
             range_x=[0, df.Deaths.max()],
             color="Entity")
# improve aesthetics (size, grids etc.)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)',
                  title_text='Evolution of Natural Disasters',
                  showlegend=False)
fig.update_xaxes(title_text='Number of Deaths')
fig.update_yaxes(title_text='')
fig.show()

# 太阳扇形图
import plotly.graph_objects as go
import plotly.express as px
import numpy as np
import pandas as pd

df = px.data.tips()
fig = go.Figure(go.Sunburst(
    labels=["Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch '],
    parents=["", "", "Female", "Female", 'Male', 'Male'],
    values=np.append(
        df.groupby('sex').tip.mean().values,
        df.groupby(['sex', 'time']).tip.mean().values),
    marker=dict(colors=px.colors.sequential.Emrld)),
    layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                     plot_bgcolor='rgba(0,0,0,0)'))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')
fig.show()

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np

df = px.data.tips()
fig = go.Figure(go.Sunburst(labels=[
    "Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch ', 'Fri', 'Sat',
    'Sun', 'Thu', 'Fri ', 'Thu ', 'Fri  ', 'Sat  ', 'Sun  ', 'Fri   ', 'Thu   '
],
    parents=[
        "", "", "Female", "Female", 'Male', 'Male',
        'Dinner', 'Dinner', 'Dinner', 'Dinner',
        'Lunch', 'Lunch', 'Dinner ', 'Dinner ',
        'Dinner ', 'Lunch ', 'Lunch '
    ],
    values=np.append(
        np.append(
            df.groupby('sex').tip.mean().values,
            df.groupby(['sex',
                        'time']).tip.mean().values,
        ),
        df.groupby(['sex', 'time',
                    'day']).tip.mean().values),
    marker=dict(colors=px.colors.sequential.Emrld)),
    layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                     plot_bgcolor='rgba(0,0,0,0)'))
fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')
fig.show()

# 指针图
import plotly.graph_objects as go

fig = go.Figure(go.Indicator(
    domain={'x': [0, 1], 'y': [0, 1]},
    value=4.3,
    mode="gauge+number+delta",
    title={'text': "Success Metric"},
    delta={'reference': 3.9},
    gauge={'bar': {'color': "lightgreen"},
           'axis': {'range': [None, 5]},
           'steps': [
               {'range': [0, 2.5], 'color': "lightgray"},
               {'range': [2.5, 4], 'color': "gray"}],
           }))
fig.show()
